package com.hw.paltfrom.service.system;

import java.sql.Timestamp;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.hw.paltfrom.mapper.HwbaseDataItemMapper;
import com.hw.paltfrom.pojo.HwBaseDataItem;
import com.hw.paltfrom.rescode.HWSystemCode;
import com.hw.paltfrom.utils.RandomNumberUtil;
import com.hw.paltfrom.utils.ResponeResultUtil;
import com.hw.paltfrom.vo.BaseDataItemVo;

@Service
public class DataDictionaryServer {

	@Autowired
	private HwbaseDataItemMapper dataItemMapper;

	// @Autowired
	// private HwbaseDataItemDetailMapper dataItemDetailMapper;

	public Map<String, Object> insert(BaseDataItemVo vo) {
		String Createuserid = vo.getfCreateuserid();
		String Createusername = vo.getfCreateusername();
		Integer Deletemark = vo.getfDeletemark();
		String Description = vo.getfDescription();
		Integer Enabledmark = vo.getfEnabledmark();
		Integer Istree = vo.getfIstree();
		String Itemcode = vo.getfItemcode();
		String Itemname = vo.getfItemname();
		String Parentid = vo.getfParentid();
		Integer Sortcode = vo.getfSortcode();

		// 先判断分类名称 或 排序码 或  编码是否重复
		Wrapper<HwBaseDataItem> namewrapper = new EntityWrapper<HwBaseDataItem>();
		namewrapper.eq("F_itemName", Itemname).and().eq("F_DeleteMark", "1");
		List<HwBaseDataItem> dataItemList = dataItemMapper.selectList(namewrapper);
		if (!dataItemList.isEmpty()) {
			return ResponeResultUtil.fail(HWSystemCode.DATAITEMNAME_EXIT);
		}
		Wrapper<HwBaseDataItem> sortwrapper = new EntityWrapper<HwBaseDataItem>();
		sortwrapper.eq("F_SortCode", Sortcode).and().eq("F_DeleteMark", "1");
		List<HwBaseDataItem> selectList = dataItemMapper.selectList(sortwrapper);
		if (!selectList.isEmpty()) {
			return ResponeResultUtil.fail(HWSystemCode.SORTCODE_EXIT);
		}

		Wrapper<HwBaseDataItem> codewrapper = new EntityWrapper<HwBaseDataItem>();
		codewrapper.eq("F_ItemCode", Itemcode).and().eq("F_DeleteMark", "1");
		List<HwBaseDataItem> codeList = dataItemMapper.selectList(codewrapper);
		if (!codeList.isEmpty()) {
			return ResponeResultUtil.fail(HWSystemCode.CODE_EXIT);
		}

//		生成ID、创建时间、插入数据库
		HwBaseDataItem hwBaseDataItem = new HwBaseDataItem();
		hwBaseDataItem.setfItemid(RandomNumberUtil.getNumber());
		hwBaseDataItem.setfParentid(Parentid);
		hwBaseDataItem.setfItemcode(RandomNumberUtil.getCode());
		hwBaseDataItem.setfItemname(Itemname);
		hwBaseDataItem.setfIstree(Istree);
		hwBaseDataItem.setfSortcode(Sortcode);
		hwBaseDataItem.setfDeletemark(Deletemark);
		hwBaseDataItem.setfEnabledmark(Enabledmark);
		hwBaseDataItem.setfDescription(Description);
		hwBaseDataItem.setfCreatedate(new Timestamp(System.currentTimeMillis()));
		hwBaseDataItem.setfCreateuserid(Createuserid);
		hwBaseDataItem.setfCreateusername(Createusername);
		Integer insert = dataItemMapper.insert(hwBaseDataItem);
		if (insert != 1) {
			return ResponeResultUtil.fail(HWSystemCode.FAIL);
		}
		return ResponeResultUtil.success(HWSystemCode.SUCCESS);

	}

//	数据字典查询
	public Map<String, Object> queryAllList(BaseDataItemVo vo) {

		String itemcode = vo.getfItemcode();
		String itemname = vo.getfItemname();
//模糊查询规则
		Wrapper<HwBaseDataItem> namewrapper = new EntityWrapper<HwBaseDataItem>();
		if (StringUtils.isNotBlank(itemcode)) {
			namewrapper.like("F_itemCode", itemcode).and().eq("F_DeleteMark", "1");
		} else if (StringUtils.isNotBlank(itemname)) {
			namewrapper.like("F_itemName", itemname).and().eq("F_DeleteMark", "1");
		}
		List<HwBaseDataItem> dataItemList = dataItemMapper.selectList(namewrapper);
		JSONArray array = JSONArray.parseArray(JSON.toJSONString(dataItemList));
		return ResponeResultUtil.successNotice(HWSystemCode.SUCCESS, array);

	}

//	数据字典更新
	public Map<String, Object> update(BaseDataItemVo vo) {
		String fItemid = vo.getfItemid();
		Integer Deletemark = vo.getfDeletemark();
		String Description = vo.getfDescription();
		Integer Enabledmark = vo.getfEnabledmark();
		Integer Istree = vo.getfIstree();
		String Itemcode = vo.getfItemcode();
		String Itemname = vo.getfItemname();
		String Parentid = vo.getfParentid();
		Integer Sortcode = vo.getfSortcode();
		String Modifyuserid = vo.getfModifyuserid();
		String Modifyusername = vo.getfModifyusername();
		
		
		Wrapper<HwBaseDataItem> wrapper = new EntityWrapper<HwBaseDataItem>();
		
		HwBaseDataItem hwBaseDataItem = new HwBaseDataItem();
//		如果删除标记为1的话，当前是删除操作
		if(vo.getfDeletemark()==1){
			
			// 通过ID查询待更新的数据
			wrapper.eq("F_ItemId", fItemid);
			hwBaseDataItem.setfDeletemark(Deletemark);
			Integer update = dataItemMapper.update(hwBaseDataItem, wrapper);
			if (update != 1) {
				return ResponeResultUtil.fail(HWSystemCode.FAIL);
			}
		}else{//更新数据库
			wrapper.eq("F_ItemId", fItemid).and().eq("F_DeleteMark", "0");
			hwBaseDataItem.setfParentid(Parentid);
			hwBaseDataItem.setfItemcode(Itemcode);
			hwBaseDataItem.setfItemname(Itemname);
			hwBaseDataItem.setfIstree(Istree);
			hwBaseDataItem.setfSortcode(Sortcode);
			hwBaseDataItem.setfEnabledmark(Enabledmark);
			hwBaseDataItem.setfDescription(Description);
			hwBaseDataItem.setfModifydate(new Timestamp(System.currentTimeMillis()));
			hwBaseDataItem.setfModifyuserid(Modifyuserid);
			hwBaseDataItem.setfModifyusername(Modifyusername);
			Integer update = dataItemMapper.update(hwBaseDataItem, wrapper);
			if (update != 1) {
				return ResponeResultUtil.fail(HWSystemCode.FAIL);
			}
		}
		
		
		return ResponeResultUtil.success(HWSystemCode.SUCCESS);
	}
}
